package Config;

import faultTolerant.FaultTolerantCategoryKeys;
import loadBalancer.LoadBalancerCategoryKey;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import retry.RetryConstant;
import retry.RetryStrategyCategoryKeys;
import serializer.SerializerCategory;

/**
 * RPC 的核心配置类
 * 用于统一管理服务端与客户端在运行期所需的关键参数（如注册中心、序列化、负载均衡、重试与容错等）。
 * 一般由配置文件或启动器装配填充，框架其他模块仅通过该对象读取所需配置。
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RpcConfig {
    // 框架实例名称（用于区分不同应用实例）
    private String name = "Cheniy-Rpc";

    // 框架版本（可用于协议/兼容性标识）
    private String version = "1.0";

    // 服务对外暴露的主机名/IP（Provider 有效）
    private String serviceHost = "localhost";

    // 服务对外暴露的端口（Provider 有效）
    private Integer servicePort = 8089;

    // 是否启用 Mock（仅在消费端无可用服务或调试时生效）
    private Boolean mock = false;

    // 序列化器类别键（见 SerializerCategory），默认 JDK
    private String serializerCategory = SerializerCategory.JdkKey;

    // 注册中心配置（包含地址、类型等）
    private RegistryConfig registryConfig = new RegistryConfig();

    // 负载均衡算法键（见 LoadBalancerCategoryKey），默认轮询
    private String balancer = LoadBalancerCategoryKey.ROUND_BALANCER;

    // 重试间隔时间（毫秒），默认见 RetryConstant
    private Long retryTime = RetryConstant.DEFAULT_RETRY_TIME;

    // 最大重试次数，默认见 RetryConstant
    private Integer retryCount = RetryConstant.DEFAULT_RETRY_COUNT;

    // 重试策略键（见 RetryStrategyCategoryKeys），默认固定间隔
    private String retryStrategy = RetryStrategyCategoryKeys.FixedTimeRetry;
    
    // 容错策略键（见 FaultTolerantCategoryKeys），默认故障转移
    private String faultTolerantKey = FaultTolerantCategoryKeys.FAIL_OVER;
}
